package cliente.vista;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import cliente.controle.ClienteControlador;
import cliente.controle.ContaControlador;
import cliente.controle.Sistema;
import cliente.modelo.Cliente;

public class ClienteView {

	private Cliente cliente;
	private JFrame tela;
	private JPanel painel;
	private JLabel cabecalho;
	private JButton botaoSacar;
	private JButton botaoDepositar;
	private JButton botaoTransferir;
	private JButton botaoVerSaldo;
	private JButton botaoExtrato;
	private JButton botaoCriarConta;
	private JButton botaoTrocarSenha;
	private JButton deletarConta;
	private ActionListener ouvinte;
	private JButton botaoLogout;

	public void iniciaTela() throws NumberFormatException, IOException {
		Sistema s = Sistema.getUnicaInstancia();
		cliente = ClienteControlador.get(s.getAtualId());
		ouvinte = new acao();
		tela = new JFrame();
		tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		tela.setResizable(false);
		tela.setBounds(500, 300, 600, 300);
		tela.setTitle("Cliente");

		cabecalho = new JLabel("Bem Vindo Sr(a). " + cliente.getNome());
		botaoSacar = new JButton("Sacar");
		botaoSacar.addActionListener(ouvinte);
		botaoDepositar = new JButton("Depositar");
		botaoDepositar.addActionListener(ouvinte);
		botaoTransferir = new JButton("Transferir");
		botaoTransferir.addActionListener(ouvinte);
		botaoVerSaldo = new JButton("Ver Saldo");
		botaoVerSaldo.addActionListener(ouvinte);
		botaoExtrato = new JButton("Ver Extrato");
		botaoExtrato.addActionListener(ouvinte);
		botaoCriarConta = new JButton("Criar Contas");
		botaoCriarConta.addActionListener(ouvinte);
		botaoTrocarSenha = new JButton("Trocar Senha");
		botaoTrocarSenha.addActionListener(ouvinte);
		deletarConta = new JButton("Deletar Conta");
		deletarConta.addActionListener(ouvinte);

		botaoLogout = new JButton("Logout");
		botaoLogout.addActionListener(ouvinte);

		painel = new JPanel();
		painel.setLayout(new GridLayout(3, 3));
		painel.add(botaoSacar);
		painel.add(botaoDepositar);
		painel.add(botaoTransferir);
		painel.add(botaoVerSaldo);
		painel.add(botaoExtrato);
		painel.add(botaoCriarConta);
		painel.add(deletarConta);
		painel.add(botaoTrocarSenha);
		painel.add(botaoLogout);
		tela.add(cabecalho, BorderLayout.NORTH);
		tela.add(painel, BorderLayout.CENTER);

		tela.setVisible(true);
	}

	// Essa classe só passará os dados para a classe de controle adequada
	class acao implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			if (arg0.getSource() != botaoCriarConta
					&& arg0.getSource() != botaoLogout
					&& arg0.getSource() != botaoTrocarSenha) {
				Sistema s = Sistema.getUnicaInstancia();
				if (!ContaControlador.exists(s.getAtualId())) {
					JOptionPane.showMessageDialog(tela,
							"Você não tem Conta.\nCrie uma Conta.");
				} else {
					if (arg0.getSource() == botaoDepositar) {
						new DepositaView().iniciaDepositaView();
						tela.dispose();
					} else if (arg0.getSource() == botaoTrocarSenha) {
						TrocarSenhaClienteView trocarSenhaClienteView = new TrocarSenhaClienteView();
						trocarSenhaClienteView.iniciaTrocaSenha(cliente);
					} else if (arg0.getSource() == botaoSacar) {
						try {
							new SacaView().iniciaSacaView();
						} catch (NumberFormatException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						tela.dispose();

					} else if (arg0.getSource() == botaoVerSaldo) {
						try {
							new SaldoView().iniciaSaldoView();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						tela.dispose();
					} else if (arg0.getSource() == botaoExtrato) {
						try {
							new VisualizarExtratoView()
									.iniciaVisualizarExtratoView();
						} catch (NumberFormatException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						tela.dispose();
					} else if (arg0.getSource() == botaoTransferir) {
						try {
							new TransfereView().iniciaTransfereView();
						} catch (NumberFormatException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						tela.dispose();
					} else if (arg0.getSource() == deletarConta) {
						new DeletaContaView().iniciaDeletarContaView();
						tela.dispose();
					}
				}
			}
			if (arg0.getSource() == botaoCriarConta) {
				new CriaContaView().iniciaCriaContaView();
				tela.dispose();
			} else if (arg0.getSource() == botaoLogout) {
				LoginView loginView = new LoginView();
				tela.dispose();
				loginView.telaLogin();
			}
		}
	}
}
